【问题标题】:Entity Framework 4.3 one to one foreign key relationshipEntity Framework 4.3 一对一的外键关系
【发布时间】:2012-06-24 10:28:07
【问题描述】:

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

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 时,上述内容才有效(这是我目前唯一的解决方案)。我已经尝试设置外键属性以及我在网上可以找到的几乎所有内容,但没有运气。这是我第一次使用存储库模式和工作单元编写实体框架。

【问题讨论】:

标签: entity-framework repository-pattern relationship entity-framework-4.3 one-to-one


【解决方案1】:

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

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 容易得多。

【讨论】:

    【解决方案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

    【讨论】:

      【解决方案3】:

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

      User (Table) UserID (P.K Identity int) UserName (nvarchar) UserSetting(表)UserSettingsID(P.K Identity int AND F.K of User.UserID)

      【讨论】:

        猜你喜欢
        • 2017-02-17
        • 1970-01-01
        • 2019-08-07
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多