C# 加入“;“关键”;属性设置为MVC4中实体代码优先的基类中的属性
我有一个.dll,其中包含一个类,其中包含一个对象列表(这来自元数据,我没有源代码): 问题是,这会导致EF给我一个错误,当它试图为APIKeyInfo中的“List Characters”属性创建一个表时(我假设它只是对MyApiKey表有一个FK),它会说该键尚未定义。所以,我的问题是,当我无法访问源代码时,如何为“List Characters”属性指定键?我希望有这样的事情: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 {
[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());
}
}