簡體   English   中英

實體框架和MVC-使用外鍵插入多個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM