首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF:物业“街”不是按“地址”类型申报的物业。

EF:物业“街”不是按“地址”类型申报的物业。
EN

Stack Overflow用户
提问于 2016-07-31 12:12:28
回答 1查看 3.7K关注 0票数 3

当我试图获得所有带有实体框架6.1的Suppliers时,我会得到以下错误。

属性“Street”不是在“Address”类型上声明的属性。使用忽略方法或NotMappedAttribute数据注释验证该属性未显式排除在模型中。确保它是有效的原语属性。

我的实体看起来是这样的:

Supplier.cs:

代码语言:javascript
复制
public class Supplier : AggregateRoot
{
    // public int Id: defined in AggregateRoot class

    public string CompanyName { get; private set; }
    public ICollection<Address> Addresses { get; private set; }

    protected Supplier() { }

    public Supplier(string companyName)
    {
        CompanyName = companyName;
        Addresses = new List<Address>();
    }

    public void ChangeCompanyName(string newCompanyName)
    {
        CompanyName = newCompanyName;
    }
}

Address.cs:

代码语言:javascript
复制
public class Address : ValueObject<Address>
{
    // public int Id: defined in ValueObject class

    public string Street { get; }
    public string Number { get; }
    public string Zipcode { get; }

    protected Address() { }

    protected override bool EqualsCore(Address other)
    {
        // removed for sake of simplicity
    }

    protected override int GetHashCodeCore()
    {
        // removed for sake of simplicity
    }
}

我还定义了两个映射:

SupplierMap.cs

代码语言:javascript
复制
public class SupplierMap : EntityTypeConfiguration<Supplier>
{
    public SupplierMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);

        // Properties
        this.Property(t => t.CompanyName).IsRequired();
    }
}

AddressMap.cs

代码语言:javascript
复制
public class AddressMap : EntityTypeConfiguration<Address>
{
    public AddressMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);

        // Properties
        this.Property(t => t.Street).IsRequired().HasMaxLength(50);
        this.Property(t => t.Number).IsRequired();
        this.Property(t => t.Zipcode).IsOptional();
    }
}

但是,当我运行以下代码时,我给出了上面描述的错误:

代码语言:javascript
复制
using (var ctx = new DDDv1Context())
{
    var aaa = ctx.Suppliers.First(); // Error here...
}

当我从ICollection类中删除Supplier.cs并从db上下文中移除映射类时,代码可以工作:

代码语言:javascript
复制
public class DDDv1Context : DbContext
{
    static DDDv1Context()
    {
        Database.SetInitializer<DDDv1Context>(null);
    }

    public DbSet<Supplier> Suppliers { get; set; }
    public DbSet<Address> Addresses { get; set; } //Can leave this without problems

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Configurations.Add(new SupplierMap());

        // Now code works when trying to get supplier
        //modelBuilder.Configurations.Add(new AddressMap());
    }

}

为什么当我尝试将它与Address类和AddresMap类一起使用时,代码会出现错误呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-31 12:37:23

您的Street属性是不可变的,它必须有一个setter才能使您的代码工作。目前,您没有在街上定义一个setter,这也是您得到错误的原因。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38683843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档