Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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
C# 实体框架5复杂类型和字段列表中的未知列错误_C#_Entity Framework - Fatal编程技术网

C# 实体框架5复杂类型和字段列表中的未知列错误

C# 实体框架5复杂类型和字段列表中的未知列错误,c#,entity-framework,C#,Entity Framework,请容忍我,因为我对C#和一般编程都是新手 我试图定义一个与principle类在同一个表中的复杂类型。基本上,这是一个很好的老用户和地址示例 public class Customer { [Key] public int customerId { get; set; } //some attributes public string street { get; set; } public string city { get; set; } p

请容忍我,因为我对C#和一般编程都是新手

我试图定义一个与principle类在同一个表中的复杂类型。基本上,这是一个很好的老用户和地址示例

public class Customer
{
    [Key]
    public int customerId { get; set; }

    //some attributes

    public string street { get; set; }
    public string city { get; set; }
    public string province { get; set; }
    public string country { get; set; }
    public string postal { get; set; }
}
因此,我尝试将地址信息切分为它自己的类:

public class Customer
{
    [Key]
    public int customerId { get; set; }

    //some attributes
    public Address address { get; set; }
}

[ComplexType]
public class Address
{
    public string street { get; set; }
    public string city { get; set; }
    public string province { get; set; }
    public string country { get; set; }
    public string postal { get; set; }
}
我没有得到编译错误,当我加载一个访问客户模型的视图时,我在字段集error中得到一个未知列

“字段列表”中的未知列“Extent1.address_street”

我基本上遵循了这个例子:


EF5是否缺少某些内容或与EF5不同?

默认情况下,EF希望列以{complextypename\u propertyname}的形式出现复杂类型的属性。如果手动创建表并以不同的方式命名列,则会出现不匹配的情况。您是否可以尝试相应地重命名列(即街道地址为\u street)或者,您应该能够向复杂类型的属性添加一个属性,告诉EF它不应该使用约定,而应该使用您指定的名称(例如,street属性的[Column(“street”)).

顺便说一句,第一个代码块确实有效,我目前正在使用它。是否可能是您使用第一个模型创建了数据库,然后在不更改数据库的情况下更改了模型,并且数据库中的列仍然称为“street”,而复杂类型的列是(按惯例)名为“address_street”?否。数据库是mySQL,我手动添加了列(street、city、province、country、postal)通过mySQL工作台添加到用户表。原始表没有地址属性,我只是添加了它来测试ComplexType。数据库是使用mySQL工作台创建的,而不是通过VS2012创建的。默认情况下,EF希望列的格式为{complextypename_propertyname}-您可以尝试相应地重命名列吗(即street到address_street)并尝试它是否有效。或者,您应该能够向属性添加属性以设置列名称(例如street属性的列(“street”)@Pawel:为什么不把你最后的评论作为答案发表?我相信这正好描述了这两种解决方案——正确命名列以符合默认EF约定,或者将属性映射到数据库中的真实列名。我通过添加[column(…)]进行了测试对地址ComplexType的注释,它可以工作。默认EF预期对EF5来说是新的吗?我下面的示例没有提到这一点。您所遵循的演练适用于EF 4.1 CTP5。AFAIK在该CTP之后引入了为具有复杂类型名称的复杂类型属性预加列的约定。