gpt4 book ai didi

c# - EF 6 如何设置 1 :M relationship with Surrogate Keys

转载 作者:行者123 更新时间:2023-11-30 18:30:41 26 4
gpt4 key购买 nike

我正在尝试对现有数据库使用 EF6(首先通过代码)。底层数据库中没有 FK。实体使用身份 pk 定义,但也可以通过代理值 (RefId) 引用。

假设我有:

public class Cart
{
public int Id { get; set; } // PK
public string RefId { get; set; }
public virtual List<CartItem> CartItems { get; set; }

}

public class CartItem
{
public int Id { get; set; } // PK
public string RefId { get; set; }
public string CartRefId {get;set;}

public virtual Cart Cart { get; set; }
}

public class CartMap : EntityTypeConfiguration<Cart>
{
public CartMap()
{
HasKey(t => t.Id);
}
}

public class CartItemMap : EntityTypeConfiguration<CartItem>
{
public CartItemMap()
{
HasKey(t => t.Id);

HasRequired(t => t.Cart)
.WithMany(t => t.CartItems)
.HasForeignKey(t => t.CartRefId);
}
}

我如何告诉 EF 它应该根据 CartItem 加入购物车

 Cart.RefId = CartItem.CartRefId

默认情况下 EF 将尝试加入

Cart.Id == CartItem.CartRefId 

因为 Cart.Id 是 Cart 实体的 Key。

最佳答案

我认为 EF 不会尝试这个:Cart.Id == CartItem.CartRefId 因为类型不同。因此,没有 PK 就不可能映射到关系,如果您需要 Id 字段自动递增,您可以这样做:

public class Cart
{
public int Id { get; set; }
public string RefId { get; set; } // PK
public virtual List<CartItem> CartItems { get; set; }

}

public class CartItem
{
public int Id { get; set; }
public string RefId { get; set; } // PK
public string CartRefId { get; set; }

public virtual Cart Cart { get; set; }
}

public class CartMap : EntityTypeConfiguration<Cart>
{
public CartMap()
{
HasKey(t => t.RefId);
Property(i => i.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}

public class CartItemMap : EntityTypeConfiguration<CartItem>
{
public CartItemMap()
{
HasKey(t => t.RefId);
Property(i => i.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

HasRequired(t => t.Cart)
.WithMany(t => t.CartItems)
.HasForeignKey(t => t.CartRefId);
}
}

如果不是,其他方式可以假定默认映射与 Id PK,然后您可以使用连接查询:

    var q = from c in db.Carts
join i in db.CartItens on c.RefId equals i.CartRefId
select i;

关于c# - EF 6 如何设置 1 :M relationship with Surrogate Keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21248177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com