Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 实体框架,两个多对多关系,使用Fluent API指向同一对象_Asp.net Mvc 3_Entity Framework_Many To Many - Fatal编程技术网

Asp.net mvc 3 实体框架,两个多对多关系,使用Fluent API指向同一对象

Asp.net mvc 3 实体框架,两个多对多关系,使用Fluent API指向同一对象,asp.net-mvc-3,entity-framework,many-to-many,Asp.net Mvc 3,Entity Framework,Many To Many,我试图使用fluentapi定义同一对象的两个多对多关系 以下是简化模型: public class PurchaseRequisition { [Key, ForeignKey("Transaction")] public int TransactionId { get; set; } public virtual ICollection<People> RequisitionedBys { get; set; } public virtual IC

我试图使用fluentapi定义同一对象的两个多对多关系

以下是简化模型:

public class PurchaseRequisition
{
    [Key, ForeignKey("Transaction")]
    public int TransactionId { get; set; }
    public virtual ICollection<People> RequisitionedBys { get; set; }
    public virtual ICollection<People> AuthorizedSignatures { get; set; }
}

public class People
{
    [Key]
    public string Id{ get; set; }
    public string FullName { get; set; }
    public virtual ICollection<PurchaseRequisition> PurchaseRequisitionsForRequisitionedBys { get; set; }
    public virtual ICollection<PurchaseRequisition> PurchaseRequisitionsForAuthorizedSignatures { get; set; }
}
公共类采购申请
{
[钥匙、外币钥匙(“交易”)]
public int TransactionId{get;set;}
公共虚拟ICollection requisionedBys{get;set;}
公共虚拟ICollection授权签名{get;set;}
}
公营阶层人士
{
[关键]
公共字符串Id{get;set;}
公共字符串全名{get;set;}
公共虚拟ICollection PurchaseRequisitionForRequisitionDBYS{get;set;}
公共虚拟ICollection PurchaseRequisitionsForAuthorizedSignatures{get;set;}
}
以下是fluent api代码:

modelBuilder.Entity<PurchaseRequisition>()
.HasMany(a => a.RequisitionedBys)
.WithMany(b => b.PurchaseRequisitionsForRequisitionedBys)
.Map(x =>
{
    x.MapLeftKey("PurchaseRequisitionId");
    x.MapRightKey("RequisitionedById");
        x.ToTable("PurchaseRequisitionRequisitionedBy");
});

modelBuilder.Entity<PurchaseRequisition>()
.HasMany(a => a.AuthorizedSignatures)
.WithMany(b =>b.PurchaseRequisitionsForAuthorizedSignatures)
.Map(x =>
{
    x.MapLeftKey("PurchaseRequisitionId");
    x.MapRightKey("AuthorizedSignatureId");
    x.ToTable("PurchaseRequisitionAuthorizedSignature");
});
modelBuilder.Entity()
.HasMany(a=>a.requisionedbys)
.WithMany(b=>b.PurchaseRequisitionForRequisitionDBys)
.Map(x=>
{
x、 MapLeftKey(“采购申请ID”);
x、 MapRightKey(“RequisitionDBYID”);
x、 ToTable(“PurchaseRequisitionRequisitionDBY”);
});
modelBuilder.Entity()
.HasMany(a=>a.AuthorizedSignatures)
.具有多个(b=>b.授权签名的采购申请)
.Map(x=>
{
x、 MapLeftKey(“采购申请ID”);
x、 MapRightKey(“AuthorizedSignatureId”);
x、 ToTable(“采购申请授权签名”);
});
我想要的是生成两个单独的链接表,但EF生成的是人员表中PurchaseRequisition的两个外键列和PurchaseRequisition字段中的人员的一个外键列

谁能告诉我可能出了什么问题吗?

问题已经解决了

我错误地认为我的数据库初始值设定项代码会删除并重新创建数据库,因为我对模型类进行了更改,并且我的初始值设定项类扩展了DropCreateDatabaseIfModelChanges


正如Slauma所建议的,即使模型已经更改,仍然无法访问fluent api代码。我正在使用SetInitializer()方法设置初始值设定项,此代码仅在我第一次使用上下文实例访问数据库时运行。

映射看起来正确。您是否在调试器中检查是否访问过modelBuilder代码?我检查过,似乎没有访问到我的代码。您的模型是来自DB优先还是来自model优先?特别是,连接字符串是否包含EDM元数据部分?如果是,您必须先删除它(使用不带元数据部分的简单连接字符串)才能使用代码,否则将根本不会调用OnModelCreating。谢谢!它正在工作。无论如何,我使用代码优先的方法来创建数据库。我认为,由于我对模型类进行了更改,它会自动删除并重新创建数据库,因为这是我在初始化器代码中指定的。只有当我向访问数据库的应用程序发出请求时,它才运行modelBuilder代码。您可能只是在设置初始值设定项(
SetInitializer
)。这不会运行初始化。当您第一次使用上下文实例访问数据库时,它会运行,或者您可以强制它使用
context.Database.Initialize(false)运行