3

我希望有人在花费无数小时配置现有数据库的数据模型后能给我更多的见解。我有以下数据库结构

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

UserSetting (Table)
    UserSettingsID (P.K Identity int)
    UserSettingsUserID (F.K of User.UserID)

在模型中,我有一个用户实体的属性 UserSetting 和用户设置实体的用户属性。

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

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

如果我在用户实体中将 UserSetting 设置为 ICollection,则上述内容仅适用(这是我目前唯一的解决方案)。我已经尝试设置外键属性以及我在网上可以找到的几乎所有内容,但没有运气。这是我第一次使用存储库模式和工作单元对实体框架进行编码。

4

3 回答 3

2

查看此人的博客以获取解决方案:

http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to-one-foreign-key-associations.aspx

基本上:

modelBuilder.Entity<User>().
HasRequired(us => us.UserSetting).
WithMany().
HasForeignKey(u => u.UserSettingId);

密切关注他如何构建User类属性和属性名称。名称必须相应匹配。

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

于 2012-06-24T10:54:17.220 回答
2

您可以将此架构用于 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

或者 EF 4.x 中用于 1 对 1 实体映射的此架构(将表拆分为两个实体):

Table Users
    UserID int, PK, Identity
    UserName nvarchar
    Settings nvarchar(max) or any other type

表拆分链接:
Using DB-First
Using Code-First

于 2012-06-24T11:47:15.167 回答
0

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

User (Table) UserID (PK Identity int) UserName (nvarchar) UserSetting (Table) UserSettingsID (PK Identity int AND FK of User.UserID)

于 2012-06-24T10:54:34.080 回答