我正在定义 POCO,与 Entity Framework 4.0 的 Code First 功能一起使用。
我的部分数据来自外部源,对于这些数据,我需要保持标识列的值与外部源的相同,有时我需要自己设置 ID。但是对于相同的实体,我有时没有 Id 并且想要类似自动增量的行为。
是否可以以这样的方式定义 POCO,即当我设置它会使用它的值时,当我不设置它时,它会自动递增?根据this mySQL forum answer mySQL应该可以很好地处理这种情况,但似乎实体框架不能......
我正在定义 POCO,与 Entity Framework 4.0 的 Code First 功能一起使用。
我的部分数据来自外部源,对于这些数据,我需要保持标识列的值与外部源的相同,有时我需要自己设置 ID。但是对于相同的实体,我有时没有 Id 并且想要类似自动增量的行为。
是否可以以这样的方式定义 POCO,即当我设置它会使用它的值时,当我不设置它时,它会自动递增?根据this mySQL forum answer mySQL应该可以很好地处理这种情况,但似乎实体框架不能......
我认为您正在寻找的是身份插入。
检查此链接:使用 IDENTITY_INSERT 和 EF4
至于以这种方式定义 POCO,它会自动知道您的意图是什么——我认为这是不可能的。在进行插入时,您必须明确设置。
我要做的是对带有 EF 的表运行原始 SQL,在其中设置 Identity Insert = ON,然后在其中插入一些行,然后将其重新设置为关闭。
请记住,您的自动递增 ID 最终可能最终具有与您在手动插入中使用的值相同的值,这实际上会破坏您的程序。
最好的问候,拉里
继 Lari 的回答之后,我建议编写一个存储过程,将 identity_insert 设置为打开,插入记录,然后再关闭。
然后我将其作为函数导入导入,然后在实体类型本身的扩展方法中使用它,或者只是作为对象上下文中的函数。
这样你就可以标准:
var user = new User("John");
entities.Add(user);
entities.SaveChanges();
键入 thing,当您想使用自动递增数字时,然后使用以下内容:
entities.CreateUser("John"); // This would be the SP
这样你就可以有条件地使用一种方法或另一种方法。它不是自动的,但可以让您使用其中任何一个。