使用下面的代碼,假設我有5種不同的類型,我可能會收到變量類型。有沒有寫一個條件語句的方法,而是使用變量「type」來規定模型是什麼,在這種情況下是「CommentVote?」。或者,這是我設計數據模型的方式中的一個不足之處,這五種模型中的每一種都有「投票」模型?避免多餘的條件語句
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
感謝您的評論,我添加了一些我希望工作的「魔法代碼」。 @Matthew,我想我想要像你說的那樣做一些事情,但我仍然在學習很多這些東西,所以我不完全確定你說的一切是什麼意思。 –