Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
C# ASP.NET MVC代码优先:多重性在关系中的角色中无效_C#_Asp.net_Entity Framework - Fatal编程技术网

C# ASP.NET MVC代码优先:多重性在关系中的角色中无效

C# ASP.NET MVC代码优先:多重性在关系中的角色中无效,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有一段简单的关系。活动链接到两个页面。一个页面只能链接到一个活动。但我一直遇到这样的错误: System.Data.Edm.EdmAssociationId::多重性在角色中无效 关系“Page\u Campaign”中的“Page\u Campaign\u Source”。因为 依赖角色属性不是键属性,而是上限 依赖角色的多重性必须为“*” 我查看了一些示例代码和教程,并将其与我的代码进行了比较,但没有发现错误 public class Campaign { [Ke

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

System.Data.Edm.EdmAssociationId::多重性在角色中无效 关系“Page\u Campaign”中的“Page\u Campaign\u Source”。因为 依赖角色属性不是键属性,而是上限 依赖角色的多重性必须为“*”

我查看了一些示例代码和教程,并将其与我的代码进行了比较,但没有发现错误

 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,但现在我得到:

保存不公开外键的实体时出错 关系的属性


我认为你的活动应该有一个页面集合,而不是两个子实体

自从我上次在MVC中编写代码以来已经有一段时间了,但如果我没记错的话,应该是这样的:

public virtual Collection<Page> pages
公共虚拟收藏页

在这种情况下,数据注释映射很容易混淆。使用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);
    }
}

我只是想知道,为什么在campaign类中只有页面的虚拟对象,而没有页面的foreignKey,而在page类中既有活动的foreignKey,又有活动的虚拟对象?RemaindPage真的是另一个类吗?或者它实际上应该是
Page
?@stmnmn,因为外键位于关系的“一侧”ship@Slauma赎回页面继承自页面您是否尝试过“清理并生成”功能;一个活动有两页(不多也不少),一页是常规版,一页是兑换版。所以我不能使用集合。那么你是说你没有接口或抽象超类?这是什么样的资源!?似乎是合法的,但我还是会制作一个接口或抽象超类页面。。但是我不知道整个上下文,所以w/e:pI可以将Fluent-API与数据注释混合在一起,对吗?(所以我不必重做我所有的类)@SirTroll你可以混合,但在某些情况下,当EF与映射混淆时,你可能会遇到问题:)@Eranga谢谢你的帮助。还有一些问题,我已经更新了OP。
    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();
}