LINQ - 为对象生成标识

时间:2013-10-31 11:17:08

标签: c# sql linq entity-framework

背景:

用户是实体,组由1个或多个实体组成。 用户使用他的电子邮件登录而不是他的entityID(= userID)。当需要创建用户时,他使用USER表中的信息填写表单(不包括他的userID ofc)。要生成用户的ID,我首先需要在ABSTRACT_ENTITY表中生成他的ID,因为groupID和userID必须是唯一的(读取:绝不能碰撞)

问题:

  • 如何让LINQ在ABSRACT_ENTITY表中为ID生成/创建下一个身份?

在其他情况下,它很容易,因为你只需填写其他行并自动生成它,但在这种情况下没有其他行......

Database Diagram

3 个答案:

答案 0 :(得分:1)

一些sudocode

Abstract_Entity entity = new Abstract_Entity();
entity.ID = Guid.NewGuid();

User user = new User();
//fill with user data
user.userID = entity.ID;

MyContext db = new MyContext();
db.Abstract_Entitys.Attach(entity);
db.Users.Attach(user);
db.SubmitChanges();

这里的想法是所有ID都是sql类型uniqueidentifier,它是c#类型的Guid。 Guids用于所有意图和目的http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates

如果你不想在代码中生成guid,你可以通过将AutoGenerateValues设置为true来自动生成值,并在数据库中将DefaultValueOrBinding设置为(newid())

答案 1 :(得分:1)

将用户和群组共有的内容放在表格abstract_entity
如果您无法想到某些内容,则只需添加“已创建”字段(作为数据时间)。这将使EF生成abstract_entity.Id的值 使用EF时,创建记录时应忽略自动设置的标识字段。
这就是为什么它不能成为表中唯一的字段

答案 2 :(得分:1)

<强>解

Abstract_Entity ae = new Abstract_Entity();
Entities.Abstract_Entity.Add(ae);
Entities.SaveChanges();

User u = new User();
u.email = email;
u.userID = ae.ID;
Entities.User.Add(u);
Entities.SaveChanges();