常用字段的导航属性

时间:2015-07-02 18:29:14

标签: .net entity-framework entity-framework-6 .net-4.5.2

在我的模型中,我有一些属性出现在多种类型上。例如,许多类型都有CreatedByUserIdCreatedDate。可以更新的类型包含LastUpdatedByUserIdLastUpdatedDate

我的第一个想法是使用复杂类型来封装这些字段以使我的映射更容易。但是,如下所述,复杂类型不能具有导航属性,因此我的实体上没有CreatedByUser

EF-Code first complex type with a navigational property

EF4 complex type with navigation property (is it possible) or alternatives?

一个选项是使用基类,但现在我只需要3个,仅限CreatedBy,仅需要LastUpdatedBy,以及两者。更不用说这是几种情况中的一种,这可能导致大量的基类并且感觉不对。

我只是咬紧牙关并在每种类型上定义这些属性吗?有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

创建一个要继承的类 以下内容将把BasicBO中的属性放在MyClass1s和MyClass2s表中。

public class Model1Context : DbContext
{
    public Model1Context()
        : base("name=Model1")
    {
        Database.SetInitializer(new Model1Initializer());
    }
    public virtual DbSet<MyClass1> MyClass1s { get; set; }
    public virtual DbSet<MyClass2> MyClass2s { get; set; }
}
public class Model1Initializer : DropCreateDatabaseIfModelChanges<Model1Context>
{
}
public class MyClass1 : BasicBO
{
    public string MyClass1Stuff { get; set; }
}
public class MyClass2 : BasicBO
{
    public string MyClass2Stuff { get; set; }
}
public class BasicBO
{
    public int Id { get; set; }
    public virtual User CreatedByUser { get; set; }  // or whatever
}