是否可以使用Code First在它们之间使用链接/联接表来创建一对多关系?
public class Foo {
public int FooId { get; set; }
// ...
public int? BarId { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar {
public int BarId { get; set; }
// ...
public virtual ICollection<Foo> Foos { get; set; }
}
我希望此映射如下:
TABLE Foo
FooId INT PRIMARY KEY
...
TABLE Bar
BarId INT PRIMARY KEY
TABLE FooBar
FooId INT PRIMARY KEY / FOREIGN KEY
BarId INT FOREIGN KEY
这样,我将能够确保Foo只有一个Bar,但是Bar可以被许多不同的Foos重复使用。
使用实体框架可以做到吗?我希望不必将密钥放在Foo本身中,因为我不希望可为空的外键。如果可能,请提供使用Fluent API的示例,而不是数据注释。
参考方案
您可以使用实体拆分来实现此目的
public class Foo
{
public int FooId { get; set; }
public string Name { get; set; }
public int BarId { get; set; }
public virtual Bar Bar { get; set; }
}
然后在您的自定义DbContext类中
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>().HasKey(f => f.FooId);
modelBuilder.Entity<Foo>()
.Map(m =>
{
m.Properties(b => new {b.Name});
m.ToTable("Foo");
})
.Map(m =>
{
m.Properties(b => new {b.BarId});
m.ToTable("FooBar");
});
modelBuilder.Entity<Foo>().HasRequired(f => f.Bar)
.WithMany(b => b.Foos)
.HasForeignKey(f => f.BarId);
modelBuilder.Entity<Bar>().HasKey(b => b.BarId);
modelBuilder.Entity<Bar>().ToTable("Bar");
}
BarId
列将在FooBar
表中创建为非空列。您可以查看Code First in the ADO.NET Entity Framework 4.1了解更多详细信息
假设我有一个列表:MyList = new List<MyEntity>(); 然后我尝试将项目添加到列表中。 WCF RIA服务通过异步调用加载的每个项目。在添加任何新项目之后,我希望MyList始终按MyEntity的属性进行排序,例如ID。如何解决这个问题? 参考方案 您可以使用SortedSet使其保持排序 SortedSet<in…
与哪些运算符>>兼容 - java我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…
>> Python中的运算符 - python>>运算符做什么?例如,以下操作10 >> 1 = 5有什么作用? 参考方案 它是右移运算符,将所有位“右移”一次。二进制10是1010移到右边变成0101这是5
Python 3运算符>>打印到文件 - python我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak…
剃刀付款集成->如何通过关闭按钮X检测剃刀付款模型是否关闭 - javascript当用户关闭而无需付款时,我在CI框架中使用Razorpay,请创建razor支付模型,然后取消订单,我希望按状态更改为已取消的状态触发查询。所以我怎么能检测到这一点。我已经通过单击jQuery单击关闭功能但无法使用... javascript大神给出的解决方案 Razorpay提供了JS方法来检测模式关闭。您编写的任何JS代码都不会在结帐页面上运行,因为它是…