我真的是EF的新手(使用EF core 2.1),并且到目前为止已经关注了很多教程,但是现在我开始创建自己的数据库结构,并在尝试向数据库中添加值时偶然发现:

private async Task<int> Insert() 
{ 
    var address = new Address { AddressLine1 = "1 any street",  AddressLine2 = "", AddressLine3 = "", City = "Any city" }; 
 
    using (var context = new BranchContext()) 
    { 
        context.Addresses.AddAsync(address);//ERROR HERE 
        .... 
    } 
 } 


我得到错误:


InvalidOperationException:属性“ Branch.Address”的类型为“ Address”,当前数据库提供程序不支持该类型。使用'[NotMapped]'属性或'OnModelCreating'中的'EntityTypeBuilder.Ignore'更改属性CLR类型或忽略该属性。


我创建了以下类:

public class Address 
{ 
    public int Id { get; set; } 
    public int Guid { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public string Number { get; set; } 
    public string AddressLine1 { get; set; } 
    public string AddressLine2 { get; set; } 
    public string AddressLine3 { get; set; } 
    public string Town { get; set; } 
    public string City { get; set; } 
    public string Postcode1 { get; set; } 
    public string Postcode2 { get; set; } 
    public string Latitude { get; set; } 
    public string Longitude { get; set; } 
} 
 
public class Branch 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public Address Address { get; set; } 
    public IEnumerable<EmployeeBranch> Employee { get; set; } 
    public bool IsMain { get; set; } 
} 
 
public class Employee 
{ 
    public int Id { get; set; } 
    public string Guid { get; set; } 
    public string EmailAddress { get; set; } 
    public JobTitle JobTitle { get; set; } 
    public DateTime DateOfBirth { get; set; } 
    public IEnumerable<EmployeeBranch> Branches { get; set; } 
    public Branch PrimaryBranch { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string PreferredName { get; set; } 
    public Salutations Salutation { get; set; } 
} 
 
public enum Salutations 
{ 
    Mr = 1, 
    Mrs = 2, 
    Miss = 3, 
    Ms = 4 
} 
 
public class EmployeeBranch 
{ 
    public int BranchId { get; set; } 
    public Branch Branch { get; set; } 
    public int EmployeeId { get; set; } 
    public Employee Employee { get; set; } 
} 
 
public class JobTitle 
{ 
    public int Id { get; set; } 
    public string Guid { get; set; } 
    public string Name { get; set; } 
} 


然后我跑了:

Add-Migration init 
Update-Database 


创建了以下内容:



为了清楚起见,这是一个运行时错误,我已经查看了几个线程,当他们尝试更新db herehere时会遇到此错误,但是他们的讨论并没有向我指出正确的方向(也许我错过了)显而易见)。

我该如何解决?最好不要更改结构,尽管我很高兴有充分的理由这样做

请您参考如下方法:

最终,这似乎是一个相当简单的答案,该错误让我查看了我的类的结构并试图找出哪里出了问题。问题是在我的BranchContext中(我不考虑在问题中共享),我迷上了OnModelCreating并根据需要设置了地址

错误

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<EmployeeBranch>() 
        .HasKey(s => new { s.BranchId, s.EmployeeId }); 
    modelBuilder.Entity<Branch>() 
        .Property(s => s.Address).IsRequired(); 
    modelBuilder.Entity<Branch>() 
        .Property(s => s.Name).IsRequired(); 
 
    base.OnModelCreating(modelBuilder); 
} 




protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<EmployeeBranch>() 
        .HasKey(s => new { s.BranchId, s.EmployeeId }); 
 
    modelBuilder.Entity<Address>() 
        .Property(s => s.AddressLine1).IsRequired(); 
    modelBuilder.Entity<Address>() 
        .Property(s => s.Postcode1).IsRequired(); 
    modelBuilder.Entity<Address>() 
        .Property(s => s.Postcode2).IsRequired(); 
    ...the other required elements... 
    modelBuilder.Entity<Branch>() 
        .Property(s => s.Name).IsRequired(); 
 
    base.OnModelCreating(modelBuilder); 
} 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!