Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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# EF代码第一列名称_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# EF代码第一列名称

C# EF代码第一列名称,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有以下课程: public class CompanyInfo { [Key] public string CompanyId { get; set; } public string CompanyName { get; set; } public Address CompanyAddress { get; set; } } 使用相应的地址类: public class Address {

我有以下课程:

public class CompanyInfo
    {
        [Key]
        public string CompanyId { get; set; }
        public string CompanyName { get; set; }
        public Address CompanyAddress  { get; set; }
    }
使用相应的地址类:

public class Address
    {
        public string StreetAddress { get; set; }
        public string StreetAddress2 { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Zip { get; set; }
        public string Plus4 { get; set; }
    } 
这就是我的问题。。。该地址现在生成以下类型的列名:

CompanyAddress_StreetAddress
我更喜欢以下内容:

PrimaryStreetAddress
鉴于Address类的成员不易访问以用于数据注释(使用域模型/视图模型结构),因此在控制器中映射为:

var company = new CompanyInfo
            {
                CompanyId = GenerateAccountNumber(),
                CompanyName = addCompany.CompanyName,
                CompanyAddress = new Address
                {
                    StreetAddress = addCompany.StreetAddress,
                    StreetAddress2 = addCompany.StreetAddress2,
                    City = addCompany.City,
                    State = addCompany.State,
                    Zip = addCompany.Zip,
                    Plus4 = addCompany.Plus4
                },

                  -- some other fields here --

            };
我知道ViewModel不是合适的场所,因为它只是在控制器中映射回模型

为可重用类“Address”设置列名的正确方法是什么?我假设这可以通过FluentAPI if实体框架完成,但我不确定如何继续


任何帮助都将不胜感激。

使用
外键
数据注释,以便ef不会使用自己的约定创建自己的外键

public class CompanyInfo
{
    [Key]
    public string CompanyId { get; set; }
    public string CompanyName { get; set; }
    public Address CompanyAddress  { get; set; }
    [ForeignKey("CompanyAddress")]
    public string PrimaryStreetAddress  { get; set; }
}

您可以在
上下文
方法
OnModelCreating
中重写,以指定
公司信息
地址
之间的关系,并且可以指定将标识该关系的外键名

public class DataContext : DbContext {

    //other properties

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
         modelBuilder.Entity<CompanyInfo>()
            .HasRequired(m => m.CompanyAddress)
            .WithOptional()
            .Map(m => { m.MapKey("CompanyAddressId"); });
    }
}
公共类DataContext:DbContext{
//其他属性
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(m=>m.CompanyAddress)
.WithOptional()
.Map(m=>{m.MapKey(“公司地址”);});
}
}

可能的重复项不是重复项。仔细看看这个独特的用例。我在提交之前看到了这一点,它与我的用例不匹配。@mason这不是该问题的重复,因为OP想命名在其模型中不存在或由EFP生成的列。如果您修改域模型,使地址最终出现在自己的表中,并且您从您的我试图避免使用外键,只是在应用程序中的所有地址用例中动态重用Address类,但这绝对是一个可行的解决方案。谢谢