ASP.Net实体框架和外键

时间:2011-01-03 09:45:18

标签: c# asp.net entity-framework entity

在编辑或添加新记录时,我正在努力研究如何使用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,我不知道该怎么办。

3 个答案:

答案 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并且仍然没有公开忘记密钥,那么我猜您在创建模型时没有选中生成外键的选项。