1

我已经使用通用存储库模式设置了实体框架代码。

这是我的模型:

public interface IEntity {
    int Key { get; set; }
}

public class Product : IEntity {
    public int Key {
        get {
            return ID;
        }
        set {
            ID = value;
        }
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public IEnumerable<Category> Category { get; set; }

}

public class Category : IEntity {
    public int Key {
        get {
            return ID;
        }
        set {
            ID = value;
        }
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public int ParentID { get; set; }

}

这是我的通用存储库中的上下文:

public class EntitiesContext : DbContext, IDbContext {

    public DbSet<Product> Products { get; set; }
    public new IDbSet<T> Set<T>() where T : class {
        return base.Set<T>();
    }
}

如您所见,产品有一个类别的 IEnumerable。如果我要创建一个数据库来匹配这将是这样的:

产品 - ID - 名称 - 等。

类别 - ID - 名称 - 等。

ProductCategories - ProductID - CategoryID

为什么我的数据库创建后没有连接表?

在此处输入图像描述

4

1 回答 1

1

我很确定这是因为您将集合定义为IEnumerable<T>. 我认为实体框架至少需要一个ICollection<T>来建立关系。 这篇 SO 帖子涵盖了大部分内容。

所以,改变这个:

public IEnumerable<Category> Category { get; set; }

对此:

public ICollection<Category> Category { get; set; }

此外,如果您想延迟加载集合,也可以将其设为虚拟:

public virtual ICollection<Category> Category { get; set; }
于 2013-03-08T09:15:11.880 回答