实体框架 - Fluent API 1到0.1版主/人

时间:2014-08-13 18:15:10

标签: entity-framework ef-fluent-api

我在迁移中收到此错误:

Person_EventModerator_Target :: Multiplicity在Role' Person_EventModerator_Target'中无效。在关系' Person_EventModerator'。由于Dependent Role属性不是关键属性,因此Dependent Role的多重性的上限必须为' *'。

以下是我的模型(注意:基本实体包含所有模型的主键):

public class EventModerator : BaseEntity
{
    ......

    // foreign keys
    public int PersonId { get; set; }

    // associations
    [ForeignKey("PersonId")]
    public Person Person { get; set; }

}


 public class Person : BaseEntity
  {
    public Person()
    {
    ....
    // association
    public virtual EventModerator EventModerator { get; set; }

}

我的映射:

        modelBuilder.Entity<Person>()
            .HasOptional(e => e.EventModerator)
            .WithRequired(e => e.Person);

这是1到0.1的关系。

有人可以指出我的错误吗?

2 个答案:

答案 0 :(得分:0)

好的,这很有用,但坦率地说我不明白需要“.WithMany()”

    internal static void Map(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<EventModerator>()
            .HasRequired(e => e.Person)
            .WithMany()
            .HasForeignKey(e => e.PersonId)
            .WillCascadeOnDelete(false);   
    }

答案 1 :(得分:0)

您的答案不会产生1到0.1的关系。在数据库的Person表上生成了另一个密钥,该密钥可以为EventModerator_Id

要使用1到0.1,从属EventModerator主键也必须是外键。

您可以在[Key]上添加PersonId属性。

[Key]
public int PersonId { get; set; }

或者,因为您有BaseEntity可能具有派生Id属性(默认情况下约定为主键),那么您只需要删除PersonId属性并链接外键到Id财产。

//public int PersonId { get; set; }

// associations
[ForeignKey("Id")]
public Person Person { get; set; }