EntityFramework域模型接口用法

时间:2014-06-18 16:20:33

标签: c# asp.net-mvc entity-framework wcf

所以我有这个域名模型:

public abstract class PrimaryKey
{
    public Guid Id {get;set;}
}

public class MyEntity : PrimaryKey
{
    public string StringProperty {get;set;}
    public MyEntity2 MyEntity2 {get;set;}
}

public class MyEntity2 : PrimaryKey
{
    public string StringProperty {get;set;}
}

我想给它们接口,以便我可以将它们与我注入的服务一起使用。我不能仅仅参考服务核心项目中的域模型,因为我认为这是落后的。

所以我想到了这个:

public interface IPrimaryKey
{
    Guid Id {get;set;}
}

public interface IMyEntity : IPrimaryKey
{
    string StringProperty {get;set;}
    IMyEntity2 MyEntity2 {get;set;}
}

public interface IMyEntity2 : IPrimaryKey
{
    string StringProperty {get;set;}
}

所以现在我有了具体的课程和界面。但是我的接口现在如何影响我的具体类,肯定引用IMyEntity将在具体类中意味着我必须定义Id属性,但我真的希望我的抽象类能够节省时间。

以下是我得到的:

public class MyEntity : IMyEntity
{
    public Guid Id {get;set;}
    public string StringProperty {get;set;}
    public IMyEntity MyEntity2 {get;set;}
}

如何使用抽象类?它还能用吗?或者我还有其他编程方法吗?

我想也许这会奏效:

public class MyEntity : PrimaryKey, IMyEntity
{
   // etc, but no Id field this time
}

如何在我的存储库中工作,我使用带有泛型的接口:

public interface IRepository
{
    Task<List<T>> AllAsync<T>();
    Task<T> FindAsync<T>(Expression<Func<T, bool>>[] params);
}

public class Repository : IRepository
{
    public Task<List<T>> AllAsync<T>()
    {
        return _dbContext.Set<T>().ToListAsync();
    }

    // etc
}

会有什么影响吗?

我这样做是因为我想将服务核心和域模型抽象为一个新项目,并在ASP.NET前端和WCF服务之间使用该项目。该服务目前只需要使用一个实体,但这可能会在以后增加。

1 个答案:

答案 0 :(得分:0)

我只想指出,在域实体中,如果您引用一个接口,它就不会在数据库中作为列创建。

所以我不认为这可以做到,就像基思佩恩所说的那样,它只会使它复杂化。