我在Visual Studio中创建了实体数据模型。现在我有一个SQL查询和从Model。生成的C#类的文件。
问题:
生成的类没有注释或代码(Fluent API)。可以吗?我试图运行我的应用程序,但抛出了异常:
无法确定类型“Runnection.Models.Address”和“Runnection.Models.User”之间关联的主要结尾。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
我读到我不能将Fluent API与“Model First”一起使用。那我该怎么办?
代码:
用户
public partial class User
{
public User()
{
this.Events = new HashSet<Event>();
this.CreatedEvents = new HashSet<Event>();
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Photo { get; set; }
public int EventId { get; set; }
public string Nickname { get; set; }
public OwnerType OwnerType { get; set; }
public NetworkPlaceType PlaceType { get; set; }
public virtual ICollection<Event> Events { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Event> CreatedEvents { get; set; }
public virtual Owner Owner { get; set; }
}
地址
public partial class Address
{
public int Id { get; set; }
public string Street { get; set; }
public string StreetNumber { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
public virtual User User { get; set; }
}
上下文
// Model First不使用此方法
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Address>().HasRequired(address => address.User)
.WithRequiredDependent();
modelBuilder.Entity<User>().HasRequired(user => user.Address)
.WithRequiredPrincipal();
base.OnModelCreating(modelBuilder);
}
答案 0 :(得分:29)
您必须以一对一的关系指定委托人。
public partial class Address
{
[Key, ForeignKey("User")]
public int Id { get; set; }
public string Street { get; set; }
public string StreetNumber { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
public virtual User User { get; set; }
}
通过指定FK约束,EF知道用户必须先存在(主体),然后是地址。
在设计器中,选择关联(用户和地址之间的行)。在属性窗口中,单击“参照约束”上的[...]按钮(或双击该行)。将Principal设置为User。
答案 1 :(得分:0)
错误: 有相同的错误&#34;无法确定类型之间关联的主要结尾&Providence.Common.Data.Batch&#39;和&#39; Providence.Common.Data.Batch&#39;。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。&#34;。
但是,请注意这是SAME表。
原因:我的数据库是MS SQL Server。不幸的是,当MS SQL Server的Management Studio添加外键时,它会将默认外键添加为Batch表的Batch ID列,链接回自身。您作为开发人员假设选择另一个表和id为真正的外键,但如果您失败,它仍然允许自引用FK的输入。
解决方案: 解决方法是删除默认的FK。
原因2:另一种情况是当前表可能是固定的,但是当EF的edmx完成时,表的旧历史图像具有默认的FK。
解决方案2:从模型浏览器的实体类型列表中删除该表,然后单击&#34;是&#34;然后&#34;从数据库更新模型&#34;试。