Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# EF代码优先:多对多+;附加属性_C#_.net_Entity Framework_Entity Framework 4.1_Ef Code First - Fatal编程技术网

C# EF代码优先:多对多+;附加属性

C# EF代码优先:多对多+;附加属性,c#,.net,entity-framework,entity-framework-4.1,ef-code-first,C#,.net,Entity Framework,Entity Framework 4.1,Ef Code First,我有以下表格:国家、语言和国家2语言 Country2Language是创建M:M关系的链接表,该关系使用Fluent映射定义: mb.Entity<Country>() .HasMany(e => e.Languages) .WithMany(set => set.Countries) .Map(mc => { mc.ToT

我有以下表格:国家、语言和国家2语言

Country2Language是创建M:M关系的链接表,该关系使用Fluent映射定义:

mb.Entity<Country>()                             
  .HasMany(e => e.Languages)
  .WithMany(set => set.Countries)                
  .Map(mc =>
         {
           mc.ToTable("Country2Language");
           mc.MapLeftKey("CountryShortName");
           mc.MapRightKey("LanguagesID");                            
         }
      );  
mb.Entity()
.HasMany(e=>e.Languages)
.WithMany(set=>set.Countries)
.Map(mc=>
{
mc.ToTable(“Country2Language”);
mc.MapLeftKey(“CountryShortName”);
mc.MapRightKey(“语言SID”);
}
);  

我的问题:如何添加额外的DateTime“DateCreated”属性?

您必须为映射到表的映射创建一个实体

public class Country2Language {
    [Key] 
    [Column(Order = 0)] 
    [ForeignKey("CountryShortName")] 
    public int CountryShortname{ get; set; } 

    [Key] 
    [Column(Order = 1)] 
    [ForeignKey("LanguagesID")] 
    public int LanguagesID { get; set; } 

    public DateTime DateCreated {get; set;}
}

使用创建的列创建表,然后将数据库中的默认值设置为GetTime函数(或者是w/e)是否有效?然后使用左/右映射,让db自动处理created的默认值


我曾经遇到过这样的问题,如果您不指定列为db生成的值,EF希望在列中插入null,但事实上,对于多对多关系,它可能甚至不知道它在那里,应该始终让它成为默认值。

您的意思是我必须添加类(实体)Country2Language到我的项目,只有一个属性“DateCreated”?@Mike-不,你还必须包括外键,但如果你愿意,你仍然可以流利地映射它们。@Mike-顺便说一句,一个很好的工具是Entity Framework Power Tools CTP1。您可以创建一个具有所需结构的示例数据库,然后使用它对其进行反向工程以首先编码。这将允许您了解在真正的代码优先模型中应该如何定义它。@myseterman:谢谢您的回答。不幸的是,您的解决方案不起作用:“类型“EFCODEFIRSTEST.Country2Language”的属性“CountryShortname”上的ForeignKeyAttribute无效。在依赖类型“EFCODEFIRSTEST.Country2Language”上找不到导航属性“CountryShortname”。名称值应为有效的导航属性名称。”@Mike:您需要导航属性,如本例中所示:FK属性上的
ForeignKey
属性必须引用导航属性,而不是它本身。另一个示例:基本上这意味着您不能再将其映射为多对多关系。相反,您需要两个一对多关系,中间有一个额外的实体。很高兴这是一个简单的解决方法,而不必承担手动维护多对多关系的责任。