Entity framework 实体框架4.3一对一外键关系

Entity framework 实体框架4.3一对一外键关系,entity-framework,repository-pattern,relationship,entity-framework-4.3,one-to-one,Entity Framework,Repository Pattern,Relationship,Entity Framework 4.3,One To One,在花了无数个小时配置现有数据库的数据模型之后,我希望有人能为我提供更多的见解。我有以下数据库结构 User (Table) UserID (P.K Identity int) UserName (nvarchar) UserSetting (Table) UserSettingsID (P.K Identity int) UserSettingsUserID (F.K of User.UserID) 在模型中,我为用户实体设置了属性UserSetting,并

在花了无数个小时配置现有数据库的数据模型之后,我希望有人能为我提供更多的见解。我有以下数据库结构

User (Table)
    UserID  (P.K Identity int)
    UserName (nvarchar)

UserSetting (Table)
    UserSettingsID (P.K Identity int)
    UserSettingsUserID (F.K of User.UserID)
在模型中,我为用户实体设置了属性UserSetting,并在UserSetting实体上设置了用户属性

在用户设置实体类型配置中

 this.HasRequired(t => t.User)
     .WithMany(t => t.UserSetting)
     .HasForeignKey(d => d.UserSettingsUserID)
     .WillCascadeOnDelete(false);

只有在用户实体中将UserSetting设置为ICollection时,上述方法才有效(这是我目前唯一的解决方案)。我尝试过设置外键属性和几乎任何我能在网上找到的东西,但没有运气。这是我第一次使用存储库模式和工作单元使用entity framework进行编码。

查看这家伙的博客以获得解决方案:

基本上:

modelBuilder.Entity<User>().
HasRequired(us => us.UserSetting).
WithMany().
HasForeignKey(u => u.UserSettingId);
modelBuilder.Entity()。
HasRequired(us=>us.UserSetting)。
WithMany()。
HasForeignKey(u=>u.UserSettingId);
请密切注意他是如何构造
用户
类属性和属性名称的。名称必须相应地匹配


顺便说一句:使用数据注释装饰实体比使用Fluent API容易得多。

如果您正在寻找一对一,那么UserSetting表应该有一个主键,同时该键应该是用户表的外键:

用户(表)用户ID(p.K Identity int)用户名(nvarchar)
用户设置(表)用户设置SID(P.K Identity int和F.K of User.UserID)

您可以将此模式用于EF 4.x中的1到0..1实体映射:

Table Users
    UserID int, PK, Identity
    UserName nvarchar

Table UserSettings
    UserID int, PK, non-Identity, FK to Users
    Settings nvarchar(max) or any other type
Table Users
    UserID int, PK, Identity
    UserName nvarchar
    Settings nvarchar(max) or any other type
或EF 4.x中1对1实体映射的此模式(将表拆分为两个实体):

Table Users
    UserID int, PK, Identity
    UserName nvarchar

Table UserSettings
    UserID int, PK, non-Identity, FK to Users
    Settings nvarchar(max) or any other type
Table Users
    UserID int, PK, Identity
    UserName nvarchar
    Settings nvarchar(max) or any other type
表格拆分链接:


要在模式定义中的DB中强制执行1对1关系,您需要在
UserSetting
表中的
UserSettingUserID
列上设置唯一约束。如果我没有弄错的话,唯一约束将只在EF 5.0中得到支持:@DannyVarod:唯一约束在EF 5.0中不受支持:它在去年的路线图上出现过,但没有进入EF 5。