다음 코드를 사용하면 변수 유형에서받을 수있는 5 가지 유형이 있다고 가정합니다. 5 가지 조건문을 작성하는 대신 하나를 작성하고 "type"변수를 사용하여 모델이 무엇인지 지시하십시오 (이 경우 "CommentVote?"). 아니면이 "투표"모델을 가진 5 가지 각각으로 데이터 모델을 설계 한 방식의 결함입니까?중복 조건문을 사용하지 마십시오
if (type == "comment")
{
CommentVote voteObj = db.CommentVotes
.Where(x => x.UserID == UserID && x.CommentID == id)
.SingleOrDefault();
if (voteObj != null)
{
voteObj.Vote = vote;
db.SaveChanges();
}
else
{
CommentVote c = new CommentVote {
CommentID = id, UserID = UserID, Vote = vote, DateCreated = DateTime.Now
};
db.CommentVotes.Add(c);
db.SaveChanges();
}
count = (db.CommentVotes.Count(x => x.CommentID == id && x.Vote == true) - db.CommentVotes.Count(x => x.CommentID == id && x.Vote == false));
}
매직 코드 : 내가 사랑 물건은 할 수있을합니다.
var modelName = "";
var modelOtherName = "";
if (type == "comment") {
modelName = CommentVote;
modelOtherName = CommentVotes;
}
modelName voteObj = db.modelOtherName
.Where(x => x.UserID == UserID && x.CommentID == id)
.SingleOrDefault();
업데이트 : 내 모델이 울부 짖는 참조 읽기의 일부를 기반으로 쓰레기 수 있습니다 생각하기 시작하고있다. 그래서 나는 그 중 일부를 참조로 포함시키고 있습니다. 이것이 내가 해결하려고 노력해야하는 문제인지 알려주십시오.
public class CommentVote
{
public int CommentVoteID { get; set; }
public bool Vote { get; set; }
public DateTime DateCreated { get; set; }
public int UserID { get; set; }
public virtual User User { get; set; }
public int CommentID { get; set; } //This row changes from model to model
public virtual Comment Comment { get; set; } //This row changes from model to model
}
나는 거의 동일한 모델을 몇 개 가지고 있습니다.
변경하려는 내용이 명확하지 않습니다. 이상적인 세계에서 당신이 원하는 것을 보여주는 마법의 발명 코드 (컴파일하지 않더라도)를 작성하여이 코드의 어떤 부분을 피하려고하는지 확인할 수 있습니다. 또한 다른 유형은 어떻게 다른가요? 코드가 완전히 다른가, 대부분 동일하거나, 거의 동일하거나, 정확히 동일하거나, 또는 무엇입니까? – Servy
각 확장 객체 'type'에서 재정의 된 저장에 대한 공통 기능을 정의하기 위해 기본 클래스를 찾고 있다고 생각하십니까? 어쩌면 Table-Per-Type 패턴을 사용하고 있을까요? 위의 주석으로, 당신이 달성하고자하는 것을 짐작할 수있는 충분한 정보가 없습니다 ... – Matthew
코멘트 주셔서 감사 드리며, 나는 "마법 코드"를 추가했습니다. @ 매튜, 나는 당신이 말한 것과 같은 일을하고 싶다고 생각하지만, 나는 아직도 많은 것을 배우기 때문에 당신이 말한 것이 무엇을 의미하는지 완전히 확신하지 못합니다. –