C# 具有不同类型外键和现有数据库的一对多实体框架

C# 具有不同类型外键和现有数据库的一对多实体框架,c#,entity-framework,one-to-many,C#,Entity Framework,One To Many,我想将实体框架层添加到具有现有数据库模式的现有应用程序中(无法更改) 我想定义一个简单的一对多关系,表a和表b中的外键和类型不同 类别/表格A(事件) [表(“事件”)] 公开课活动 { 公共活动() { 参与者=新列表(); } [关键] 公共int事件编号{get;set;} 公共Guid?MemberCollectionId{get;set;} [ForeignKey(“CollectionId”)] 公共虚拟ICollection参与者{get;set;} } 类别/表格B(成员集合)

我想将实体框架层添加到具有现有数据库模式的现有应用程序中(无法更改)

我想定义一个简单的一对多关系,表a和表b中的外键和类型不同

类别/表格A(事件)

[表(“事件”)]
公开课活动
{
公共活动()
{
参与者=新列表();
}
[关键]
公共int事件编号{get;set;}
公共Guid?MemberCollectionId{get;set;}
[ForeignKey(“CollectionId”)]
公共虚拟ICollection参与者{get;set;}
}
类别/表格B(成员集合)

[表(“成员集合”)]
公共类成员集合
{
[关键]
公共Guid集合ID{get;set;}
public int MemberNumber{get;set;}
[行政长官(30)]
公共字符串RoleId{get;set;}
}
上面的代码导致以下异常

引用约束的从属角色中所有属性的类型必须与主体角色中相应的属性类型相同。实体“MemberCollections”上的属性“CollectionId”的类型与引用约束“Event\u MemberCollections”中实体“Event”上的属性“EventNumber”的类型不匹配

我如何告诉实体框架映射是通过MemberCollectionId而不是通过EventNumber完成的


谢谢

如果数据库已经存在,是否有任何理由不使用数据库优先机制?它将自动为您创建所有实体和关系

您的所有类都创建为分部,因此您仍然可以扩展EF层中的类等


我总是倾向于这样创建我的表,因为我总是喜欢在EF之外设置我的数据库结构,因为我对SQL比较有经验,我可以先集中精力优化我的数据库。

尝试使用
[ForeignKey(“MemberCollectionId”)]
而不是
[ForeignKey(“CollectionId”)]
我以前尝试过:类型“Event”的属性“MemberCollections”上的ForeignKeyAttribute无效。在依赖类型“MemberCollection”上未找到外键名称“MemberCollectionId”。名称值应该是以逗号分隔的外键属性名称列表。问题是:如何将Event.MemberCollectionId映射到MemberCollection.CollectionId?这是计划b;)。这个案子本身很简单,我不能接受,因为我不能让它工作;-)。我将快速创建生成的代理,查看它应用于实体的哪些属性,并复制它:p那么至少您可以保证它适用于您的实体框架版本。在一个单独的项目中进行,这样就不会把任何事情搞砸。好主意,我尝试了这个。我在理解我的DB设计时遇到了问题。通过EF创建实体给了我一个提示;-)。毫不奇怪,这不是EF问题。