我可以在备用密钥中使用拥有类型的属性吗?

时间:2018-08-16 11:53:21

标签: c# ef-core-2.1

我想在EF中支持此类sql:

create table prepare(
    id int not null auto_increment,
    target_id int not null,
    key_user_id int not null,
    key_date date not null,

    primary key(id)
);

CREATE UNIQUE INDEX ak__prepare
    ON prepare (
        target_id,
        key_user_id,
        key_date
    );

我的模特:

public sealed class Prepare
{
    public int Id { get; set; }

    // Uniq
    public int TargetId { get; set; }
    public Key Key { get; set; }    
    // End uniq
}

public class Key {
    public int UserId {get;set;}
    public DateTime Date {get;set;}
}

按我的方式配置时

modelBuilder.Entity<Prepare>()
    .OwnsOne(z => z.Key)
    .HasAlternateKey(c => new { c.TargetId, c.Key.UserId, c.Key.Date });

EF说

属性表达式'c => new <> f__AnonymousType32`4(TargetId = c.TargetId,UserId = c.Key.UserId,Date = c.Key.Date)'无效。该表达式应表示一个简单的属性访问:“ t => t.MyProperty”。指定多个属性时,请使用匿名类型:'t => new {t.MyProperty1,t.MyProperty2}'。

按我的方式配置时

modelBuilder.Entity<Prepare>()
    .OwnsOne(z => z.Key)
    .HasAlternateKey(c => new { c.TargetId, c.Key });

EF说

“键”不能用作实体类型“准备”的属性,因为它已配置为导航。”

那么唯一的方法-忘记拥有的类型了吗?

0 个答案:

没有答案