Asp.net mvc 使用外键作为一对多中唯一主键的实体框架
我首先使用实体框架代码来设计数据库 我有两个一对多关系的模型。一个“Foo”可以有多个“FooData”,如下所示-Asp.net mvc 使用外键作为一对多中唯一主键的实体框架,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我首先使用实体框架代码来设计数据库 我有两个一对多关系的模型。一个“Foo”可以有多个“FooData”,如下所示- public class Foo { [Key] public string serialNumber{get; set;} public int someNumber {get; set;} public string someName {get; set;} // Many more properties // Navigation Collectio
public class Foo {
[Key]
public string serialNumber{get; set;}
public int someNumber {get; set;}
public string someName {get; set;}
// Many more properties
// Navigation Collection
public virtual ICollection<FooData> FooDatas{get; set;}
}
public class FooData{
[Key]
[ForeignKey("foo")]
public string SerialNum {get; set;}
public DateTime SomeTime {get; set;}
public byte[] SomeData {get; set;}
// Navigation property
public virtual Foo foo {get; set;}
}
公共类Foo{
[关键]
公共字符串序列号{get;set;}
公共int someNumber{get;set;}
公共字符串someName{get;set;}
//更多的财产
//导航集合
公共虚拟ICollection FooDatas{get;set;}
}
公共类数据{
[关键]
[外键(“foo”)]
公共字符串SerialNum{get;set;}
公共日期时间{get;set;}
公共字节[]SomeData{get;set;}
//导航属性
公共虚拟Foo Foo{get;set;}
}
当我尝试在MVC中为“Foo”添加一个控制器时,使用“Foo”作为支架模型,它给出了一个错误——“多重性在角色中无效。因为依赖角色引用关键属性,所以依赖角色的多重性上限必须为1”
我希望能在这里得到一些帮助
谢谢您因为您是如何定义的,所以这两个键都使用相同的键,因此它是一对一的关系。如果您想要一个真正的一对多,您需要添加/创建另一个字段,并将它们设置为FooData表/实体上的复合键
public class Foo {
[Key]
public string serialNumber{get; set;}
public virtual ICollection<FooData> FooDatas{get; set;}
}
public class FooData {
[Key, Column(Order = 0),ForeignKey("foo")]
public string SerialNum {get; set;}
[Key,Column(Order=1)]
public int DataId {get;set;}
public virtual Foo foo {get; set;}
}
公共类Foo{
[关键]
公共字符串序列号{get;set;}
公共虚拟ICollection FooDatas{get;set;}
}
公共类数据{
[Key,Column(Order=0),ForeignKey(“foo”)]
公共字符串SerialNum{get;set;}
[键,列(顺序=1)]
public int DataId{get;set;}
公共虚拟Foo Foo{get;set;}
}
如果FooData.SerialNum
是其FooData
的主键,并且是Foo
中的外键,则类之间的关系不能是1-many,它被限制为1-0:1,因为将其设置为key
会强制使其唯一。尝试从FooData.SerialNum
中删除Key
。如果我从FooData中删除[Key],则错误显示“FooData”没有定义键。您可能需要为详细表创建代理标识键字段。是的,我相信这就是解决方案。谢谢,布拉德利。这正是我所做的。谢谢