假设我有以下对象:
实体:
public class MyEntity : NamedEntity
{
}
public abstract class NamedEntity : VersionedEntity
{
public LocalizedText Name { get; set; }
}
复杂对象(LocalizedText):
public class LocalizedText : ILocalized<string>
{
protected LocalizedText()
{
}
public LocalizedText(string en, string de = null, string fr = null)
{
En = en;
De = de;
Fr = fr;
}
public string En { get; set; }
public string De { get; set; }
public string Fr { get; set; }
}
有了这个,我得到以下异常:
System.InvalidOperationException: 'The entity type 'LocalizedText' requires a primary key to be defined.'
我不想使用LocalizedText
来创建实体,但希望将其存储在数据库中MyEntity表的列中,例如Name_EN,Name_DE和Name_FR。
我该如何实现?
答案 0 :(得分:0)
对于上面的代码,我已将DbContext
实现修改为:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<MyEntity>()
.OwnsOne(r => r.Name);
}
这将导致以下CREATE([...]中遮盖了不相关的部分):
CREATE TABLE [dbo].[MyEntity](
[...]
[Name_En] [nvarchar](max) NULL,
[Name_De] [nvarchar](max) NULL,
[Name_Fr] [nvarchar](max) NULL,