在编辑或添加新记录时,我正在努力研究如何使用Entity Framework处理foriegn密钥。例如,我有一个人员表,其中timezone_id链接到我的时区表。
但该模型似乎不包括timezone_id。我认为这是一种新的做事方式,但是......我如何存储我的记录?
我的方法:
public static string CreateUser(string username, string email, string password, string firstname, string surname, int timezoneId)
{
user u = new user();
u.surname = surname;
u.firstname = firstname;
u.email = email;
u.password = password;
u.username = username;
Db.AddTousers(u);
Db.SaveChanges();
return username;
}
我不能做u.timezone_id = timezoneid;
我只有u.timezone(它似乎是实际的实体)和u.timezoneReference,我不知道该怎么办。
答案 0 :(得分:1)
我只有u.timezone
是的,模型应该将FK公开为Navigation属性。只需在那里分配你的TimeZone对象。
答案 1 :(得分:1)
我认为你必须从数据库中填写时区实体,即
u.timezone = DB.TimezoneSet.FirstOrDefault(tz => tz.Id == timezoneid);
假设您已使用EF3生成了集名称;它在EF4中默认为DB.Timezones
。如果这是EF4,那么您也可以为包含ID列的表重新生成EDMX - 在向导的首页上有一个选项。
TimezoneReference
属性用于测试子实体是否已加载,强制加载等等。
答案 2 :(得分:1)
如果您使用的是EF v1,并且您不想按原样添加对象,则需要执行此操作。
u.TimezoneReference.EntityKey = new EntityKey("DB.TimeZone", "ID", id)
id是外键。
如果您使用的是EF v4并且仍然没有公开忘记密钥,那么我猜您在创建模型时没有选中生成外键的选项。