gpt4 book ai didi

c# - ASP.NET MVC 代码优先 : Multiplicity is not valid in Role in relationship

转载 作者:行者123 更新时间:2023-11-30 17:13:18 28 4
gpt4 key购买 nike

我有一个简单的关系。一个事件链接到两个页面。一个页面只能链接到一个事件。但我一直遇到这个错误:

System.Data.Edm.EdmAssociationEnd: : Multiplicity is not valid in Role 'Page_Campaign_Source' in relationship 'Page_Campaign'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.

我浏览了一些示例代码和教程,同时将其与我的代码进行了比较,但我找不到错误。

 public class Campaign
{
[Key()]
public int Campaignid { get; set; }
public string Name { get; set; }

public virtual Page LandingPage { get; set; }
public virtual RedeemPage RedeemPage { get; set; }
}


public class Page
{
[Key()]
public int PageContentId { get; set; }
public string Logo { get; set; }
public string Css { get; set; }

[ForeignKey("Campaign")]
public int campaignID { get; set; }
public virtual Campaign Campaign { get; set; }
}

编辑

按照 Eranga 的回复并改为使用 Fluent API 但现在我得到:

An error occurred while saving entities that do not expose foreign key properties for their relationships

最佳答案

在这种情况下,数据注释映射很困惑。使用 Fluent API 进行配置。删除导航属性映射的数据注释并使用 Fluent API,如下所示。

class MyContext : DbContext
{

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Campaign>().HasRequired(x => x.LandingPage)
.WithMany();

modelBuilder.Entity<Page>().HasRequired(x => x.Campaign)
.WithMany()
.HasForeignKey(x => x.campaignID);

base.OnModelCreating(modelBuilder);
}
}

编辑

设置 WillCascadeOnDelete(false) 后的问题是 CampaignPage 都有自动递增的 PK,并且你有一对一1 映射。因此,要保存一条记录,它需要插入的另一行的 ID,而另一行需要第一行的 ID。

您可以将 PK 更改为 GUID 或将 1 FK 设为可为空并调用 SaveChanges 两次。例如

将关系更改为可为空

    modelBuilder.Entity<Campaign>().HasOptional(x => x.LandingPage)
.WithMany();


using(var scope = new TransactionScope())
{

context.Campaigns.Add(campaign);
context.SaveChanges();

page.CampaignId = campaign.CampaignId;
context.Pagess.Add(page);
context.SaveChanges();

scope.Complete();
}

关于c# - ASP.NET MVC 代码优先 : Multiplicity is not valid in Role in relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888105/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com