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