C# 加入“;“关键”;属性设置为MVC4中实体代码优先的基类中的属性

C# 加入“;“关键”;属性设置为MVC4中实体代码优先的基类中的属性,c#,asp.net,entity-framework,asp.net-mvc-4,ef-code-first,C#,Asp.net,Entity Framework,Asp.net Mvc 4,Ef Code First,我有一个.dll,其中包含一个类,其中包含一个对象列表(这来自元数据,我没有源代码): 问题是,这会导致EF给我一个错误,当它试图为APIKeyInfo中的“List Characters”属性创建一个表时(我假设它只是对MyApiKey表有一个FK),它会说该键尚未定义。所以,我的问题是,当我无法访问源代码时,如何为“List Characters”属性指定键?我希望有这样的事情: [Table("MyApiKey")] public class MyApiKey : APIKeyInfo {

我有一个.dll,其中包含一个类,其中包含一个对象列表(这来自元数据,我没有源代码):

问题是,这会导致EF给我一个错误,当它试图为APIKeyInfo中的“List Characters”属性创建一个表时(我假设它只是对MyApiKey表有一个FK),它会说该键尚未定义。所以,我的问题是,当我无法访问源代码时,如何为“List Characters”属性指定键?我希望有这样的事情:

[Table("MyApiKey")]
public class MyApiKey : APIKeyInfo
{
    [Key]
    public int KeyId { get; set; }
    [Required]
    public string vCode { get; set; } 

    [Key]
    base.Characters.CharacterID;
}

告诉它使用哪个属性,但显然不起作用。

我实际上没有尝试过这个,但我不明白为什么它不起作用。 尝试使用EntityTypeConfiguration对象,而不是使用属性 e、 g


您还可以添加需要设置为映射的关系和任何其他属性。

我实际上没有尝试过这种方法,但我不明白为什么它不起作用。 尝试使用EntityTypeConfiguration对象,而不是使用属性 e、 g


您还可以添加关系和任何其他需要设置为映射的属性。

我非常确定,如果您不控制实体的源代码,您不能先使用代码……如果您不控制实体的源代码,我非常确定您不能先使用代码……这是有效的!回答得很好,这让我可以添加任何其他需要的属性。我刚刚发现了一个问题。当我将新项保存到数据库时,它会覆盖我给它的“KeyID”,并使用自动生成的密钥。有没有办法告诉它不要这样做?是的,您可以指定一个属性,不让数据库自动生成密钥
this.Property(x=>x.KeyId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)(我脑子里想不出来)是的,我试过了,但它所做的只是每次都用“1”而不是递增的值覆盖我的给定值。在查看数据库架构后,它似乎使KeyId(主键)字段成为一个标识字段,这就是它为什么要覆盖它的原因。我需要找到一种方法阻止它成为一种身份。编辑:没关系,它只是保留了旧的设置,我不得不完全删除数据库。现在起作用了,起作用了!回答得很好,这让我可以添加任何其他需要的属性。我刚刚发现了一个问题。当我将新项保存到数据库时,它会覆盖我给它的“KeyID”,并使用自动生成的密钥。有没有办法告诉它不要这样做?是的,您可以指定一个属性,不让数据库自动生成密钥
this.Property(x=>x.KeyId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)(我脑子里想不出来)是的,我试过了,但它所做的只是每次都用“1”而不是递增的值覆盖我的给定值。在查看数据库架构后,它似乎使KeyId(主键)字段成为一个标识字段,这就是它为什么要覆盖它的原因。我需要找到一种方法阻止它成为一种身份。编辑:没关系,它只是保留了旧的设置,我不得不完全删除数据库。现在工作。
[Table("MyApiKey")]
public class MyApiKey : APIKeyInfo
{
    [Key]
    public int KeyId { get; set; }
    [Required]
    public string vCode { get; set; } 
}
[Table("MyApiKey")]
public class MyApiKey : APIKeyInfo
{
    [Key]
    public int KeyId { get; set; }
    [Required]
    public string vCode { get; set; } 

    [Key]
    base.Characters.CharacterID;
}
 public class MyApiKeyMapping : EntityTypeConfiguration<MyApiKey>
 {
     public MyApiKeyMapping()
     {
         this.ToTable("MyApiKey");
         this.HasKey(k => k.KeyId);
         this.Property(p => p.vCode).IsRequired();
     }
}

public class AccountEntryMapping : EntityTypeConfiguration<AccountEntry>
{
    public AccountEntryMapping()
    {
        this.ToTable("AccountEntry");
        this.HasKey(k => k.CharacterId);
    }
}
public class MyApiContext : DbContext
{

    ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new MyApiKeyMapping());
        modelBuilder.Configurations.Add(new AccountEntryMapping());
    }
}