簡體   English   中英

Entity Framework Code First SaveChanges 創建一個新對象

[英]Entity Framework Code First SaveChanges creates a new object

我在我的項目中使用 Code First 方法。

這是我的對象:

public class Account
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ID { get; set; }
    public string name { get;set; }
}

如果我創建一個新記錄,那就可以了:

using(var context = new context())
{
    context.Accounts.add(account);
    context.savechanges(); //This saves fine 
}

但是當我更改一個屬性時,它會在數據庫中保存另一條記錄:

using (var context = new context())
{
    var account = context.Account.where(x => x.ID == GUID).FirstOrDefault();
    if (account != null)
    {
        account.name = "UpdatedName";
        context.savechanges(); // This creates a new record!!
    }
}

我對實體框架相當陌生; 為什么每次都創建新記錄? 是ID上的屬性嗎? 如果是,那么我如何使用 GUIDS 作為 ID 而不是整數?

您帳戶選項中的屬性應該可以很好地將 ID 列設置為對象的主鍵。

如果您在保存更改時將新條目添加到數據庫中,則幾乎可以肯定是您在從數據庫接收對象后更改了對象的主鍵(ID 屬性)的結果。 也許您正在嘗試在一些您沒有包含的代碼中自己設置 GUID 屬性? (你應該讓數據庫分配它)。

在任何情況下,這個簡單的控制台應用程序都會使用您的設置並按預期工作。 如果您在代碼中沒有看到更改 GUID 的明顯位置,也許您可​​以發布您的實際代碼? (我注意到粘貼的內容中有幾個拼寫錯誤,因此它似乎不是您實際使用的內容)

public class Account
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ID { get; set; }
    public string name { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Account> Accounts { get; set; }
}

class Program
{
    static Guid MyGuid = Guid.Empty;

    static void Main(string[] args)
    {
        using (var context = new MyContext())
        {
            Account account = new Account { name = "OldName" };
            context.Accounts.Add( account );
            context.SaveChanges();

            MyGuid = account.ID;
        }

        using (var context = new MyContext())
        {
            var account = context.Accounts.Where(x => x.ID == MyGuid).FirstOrDefault();
            if (account != null)
            {
                account.name = "UpdatedName";
                context.SaveChanges();
            }
        }
    }
}

我在項目中使用“代碼優先”方法。

這是我的對象:

public class Account
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ID { get; set; }
    public string name { get;set; }
}

如果創建新記錄,可以:

using(var context = new context())
{
    context.Accounts.add(account);
    context.savechanges(); //This saves fine 
}

但是,當我更改屬性時,它將在數據庫中保存另一條記錄:

using (var context = new context())
{
    var account = context.Account.where(x => x.ID == GUID).FirstOrDefault();
    if (account != null)
    {
        account.name = "UpdatedName";
        context.savechanges(); // This creates a new record!!
    }
}

我是實體框架的新手。 為什么每次都要創建新記錄? 它是ID上的屬性嗎? 如果是這樣,那我怎么用GUIDS作為ID而不是整數呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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