Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Asp.net mvc 使用外键作为一对多中唯一主键的实体框架_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net mvc 使用外键作为一对多中唯一主键的实体框架

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

我首先使用实体框架代码来设计数据库

我有两个一对多关系的模型。一个“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 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”没有定义键。您可能需要为详细表创建代理标识键字段。是的,我相信这就是解决方案。谢谢,布拉德利。这正是我所做的。谢谢