复合键作为外键
我在 MVC 3 应用程序中使用实体框架 4.1。我有一个实体,其中主键由两列(复合键)组成。这在另一个实体中用作外键。如何建立关系?在正常情况下,我们使用:
public class Category
{
public string CategoryId { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string CategoryId { get; set; }
public virtual Category Category { get; set; }
}
但是如果类别有两列键怎么办?
I am using Entity framework 4.1 in MVC 3 application. I have an entity where I have primary key consists of two columns ( composite key). And this is being used in another entity as foreign key. How to create the relationship ? In normal scnerios we use :
public class Category
{
public string CategoryId { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string CategoryId { get; set; }
public virtual Category Category { get; set; }
}
but what if category has two columns key ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用 Fluent API:
或数据注释:
You can use either fluent API:
Or data annotations:
我相信最简单的方法是在导航属性上使用数据注释,如下所示:
[ForeignKey("CategoryId1, CategoryId2")]
I believe the easiest way is to use Data Annotation on the Navigation property like this:
[ForeignKey("CategoryId1, CategoryId2")]
在
.NET Core
和.NET 5 <
中,文档仅显示数据注释(简单键)
。https://learn.microsoft.com/en-us/ef/core/modeling/relationships?tabs= Fluent-api%2C Fluent-api-composite-key%2Csimple-key#foreign-key< /a>
但是,使用 @LadislavMrnka 的示例,您将收到如下错误消息:
使用该错误消息,您可以编写如下代码:
来自 Microsoft 的
Fluent API(复合键)
示例:In
.NET Core
and.NET 5 <
the documentation only showsData annotations (simple key)
.https://learn.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-composite-key%2Csimple-key#foreign-key
However using the example from @LadislavMrnka you will get a error message like this:
Using that error message you can write the code like this:
Fluent API (composite key)
example from Microsoft: