【问题标题】:Delete relationship between entities in Entity Framework Core在 Entity Framework Core 中删除实体之间的关系
【发布时间】:2016-08-18 11:36:06
【问题描述】:

例如,我有这样一个简单的模型:

var address = _dbContext.Addresses.Add(new Address()
{
    AddressId = Guid.NewGuid().ToString(),
    StreetName = "Test street name"
}).Entity;
_dbContext.Libraries.Add(new Library()
{
    LibraryId = Guid.NewGuid().ToString(),
    Name = "Test library",
    Address = address
});

但是,我怎样才能打破他们之间的关系呢?如果我只是想将测试库和测试地址保留在数据库中,但打破它们之间的关系,我想测试库的外键必须为空。我怎样才能做到这一点?

【问题讨论】:

    标签: c# entity-framework asp.net-core entity-framework-core


    【解决方案1】:

    您的实体模型在外键列上必须可以为空。

    public class Library
    {
        ...
        public Guid? AddressId{get;set;}
        public virtual Address Address {get;set;}
    }
    

    然后您可以将地址设置为空。否则我认为是不可能的

    【讨论】:

    • 我没有明确设置AddressId null,我将导航属性Address设置为null,这显然是可以为空的。
    • 这不起作用,因为实体框架从您的 GUID 列中获取具有主键的引用对象,就像连接语句一样。
    • 地址只是虚拟的,不会保存在您的数据库中。 AddressId 列已保存。如果您只想在请求关系时获得 null,只需编写类似这样的内容(我知道这不是完全正确的语法)public virtual Adress Adress {get {return null;};set{Adress =value}}
    • 这是 EF Core,我们也不需要 virtual 关键字,virtual 用于延迟加载。但是,打破模式,不是最好的选择,最好避免这种干预。
    • 我知道这是关于 ef core 的,但我们不需要 virtual 我不知道 :D 很高兴知道,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2021-12-03
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多