[英]asp.net mvc - Inserting multiple records in the third table having foreign keys to parent using entity framework 6
[英]Entity Framework & MVC - Insert into multiple table using foreign keys
我有兩個表,Property和PropertyMeta。 它們通過PropertyID值鏈接。 我剛剛開始使用ASP.net MVC,目前正在使用MVC2(由於托管提供商的約束)。 從一個簡單的創建頁面,我試圖填充兩個表,但是我一點運氣都沒有。
[HttpPost, Authorize]
public ActionResult Create(PropertyViewModel property)
{
try
{
MyEntities db = new MyEntities();
Property _property = new Property();
_property = property.Properties;
PropertyMeta _meta = new PropertyMeta();
_meta.Property = _property;
_meta = property.Meta;
db.AddToProperties(_property);
db.AddToPropertyMetas(_meta);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
我已經嘗試了上面的方法,但是沒有用。 這很煩人,這應該很簡單,但是我被卡住了。 誰能想到上面的問題嗎? 任何幫助將不勝感激!
是PropertyViewModel.Properties
類型的Property
? 我猜問題出在這兩行代碼中,因為創建一個新的Property
並立即為其分配property.Properties
似乎沒有意義。
Property _property = new Property();
_property = property.Properties;
您正在覆蓋您的價值。
_meta.Property = _property; //sets an individual property
_meta = property.Meta; //Overwrites all properties
反轉行,以便您寫入所有值,然后再設置單個值。
_meta = property.Meta; //Overwrites all properties
_meta.Property = _property; //sets an individual property
閱讀您的評論后,我意識到您正在嘗試做什么。 在將屬性輸入數據庫之前,您的屬性沒有ID。 如果在調試器中逐步執行此操作,則可以看到此內容。 要解決此問題,請先提交屬性,然后再將其應用於您的元數據。
MyEntities db = new MyEntities();
Property _property = property.Properties;
db.AddToProperties(_property);
db.SaveChanges();
此時,如果您在調試器中查看_properties,那么ID值現在將設置為數據庫分配的值。 現在,當您將元數據綁定到屬性時,它將是帶有鍵的實際屬性項,因此它將知道如何在數據庫中將其關聯。
PropertyMeta _meta = property.Meta;
_meta.Property = _property;
db.AddToPropertyMetas(_meta);
db.SaveChanges();
您的問題不是Entity Framework太復雜了,因為您正在創建新變量並立即用不同類型的值覆蓋它們(甚至不確定如何編譯),所以您似乎對C#的總體工作掌握得不好。 。
您有幾個問題:
Property _property = new Property();
_property = property.Properties;
這將創建一個新的_property。 然后,在剛創建的屬性上分配一個新的屬性。 您不應該在視圖模型中使用域模型對象,但這並不是您真正的問題。
您可以這樣做:
Property _property = property.Properties;
接下來,您有此問題:
PropertyMeta _meta = new PropertyMeta();
_meta.Property = _property;
_meta = property.Meta; // overwrites the value assigned above
同樣,您將覆蓋剛剛創建的對象。 所以這是等價的:
PropertyMeta _meta = property.Meta;
_meta.Property = _property;
最后,這是最后一點:
db.PropertyMetas.Add(_meta);
db.SaveChanges();
EF會自動將屬性添加到表中,因為它已鏈接到_meta.Property表中,因此您無需顯式添加它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.