背景:
用户是实体,组由1个或多个实体组成。 用户使用他的电子邮件登录而不是他的entityID(= userID)。当需要创建用户时,他使用USER表中的信息填写表单(不包括他的userID ofc)。要生成用户的ID,我首先需要在ABSTRACT_ENTITY表中生成他的ID,因为groupID和userID必须是唯一的(读取:绝不能碰撞)
问题:
在其他情况下,它很容易,因为你只需填写其他行并自动生成它,但在这种情况下没有其他行......
答案 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();