C# 如何创建一个;“非动态”;Guid作为数据库项的值?

C# 如何创建一个;“非动态”;Guid作为数据库项的值?,c#,guid,C#,Guid,我将尝试解释我想要获得什么: 我正在尝试创建Guid值作为数据库项的属性。 我已经检查了其他问题和答案,以解决我的问题,这是我迄今为止得到的模型: public class MyModel { private Guid myGuid = Guid.NewGuid(); public Guid MyGuid { get { return myGuid; } set { myGuid = value; } } } 但问题不在这段代码中

我将尝试解释我想要获得什么:
我正在尝试创建Guid值作为数据库项的属性。
我已经检查了其他问题和答案,以解决我的问题,这是我迄今为止得到的模型:

public class MyModel
{
    private Guid myGuid = Guid.NewGuid();
    public Guid MyGuid
    {
        get { return myGuid; }
        set { myGuid = value; }
    }
}
但问题不在这段代码中。因为这样会自动生成Guid值,我可以在视图中验证Guid。
但每次我在数据库中编辑一个条目时,Guid都会刷新并更改。这就是为什么我称之为“动态”Guid。
我猜是因为属性MyGuid每次调用数据模型的私有部分时(=Guid.NewGuid();)。
那么,我如何创建一个随机Guid,然后将其设置为MyGuid的值呢

编辑-1

为了创建更精确的Guid生成,我在模型中创建了一个方法。现在,我的模型如下所示:

public class MyModel
{
    public string myGuid = Convert.ToString(new Guid());

    public string MyMethod(string myValue)
    {
        var empty = Convert.ToString(new Guid());
        if (myValue == null || myValue == empty)
        {
            var newGuid = Guid.NewGuid();
            string stringGuid = Convert.ToString(newGuid);
            return stringGuid;
        }
        else { return myValue;}
    }

    public Guid MyGuid
    {
        get { return myGuid; }
        set { myGuid = MyMethod(value); }
    }
}
在另一个项目的测试中,此方法只工作了一次,然后,当我尝试导入此方法时,它中断并停止工作。
使用此方法,当我在数据库中创建条目时,每当我的Guid编辑器字段为空或Guid为零时,它都应该生成Guid.NewGuid(),不是吗?
那么,为什么这段代码在一个辅助项目上工作而在另一个项目上不工作呢?

我遗漏了什么?

除了在代码中创建GUID之外,您还可以在数据库中创建GUID,就像这样插入时一样

          DECLARE @ID uniqueidentifier
          SET @ID = NEWID()

除了在代码中创建GUID之外,您还可以在数据库中创建GUID,就像这样插入

          DECLARE @ID uniqueidentifier
          SET @ID = NEWID()

你应该让它更接近第一个模型IMHO

您可以简单地添加一个以Guid为参数的构造函数

public class MyModel
{
    private Guid myGuid;

    public MyModel()
    {
        myGuid = Guid.NewGuid();
    }

    public MyModel(Guid guid)
    {
        myGuid = guid;
    }

    public Guid MyGuid
    {
        get { return myGuid; }
        set { myGuid = value; }
    }
}

你应该让它更接近第一个模型IMHO

您可以简单地添加一个以Guid为参数的构造函数

public class MyModel
{
    private Guid myGuid;

    public MyModel()
    {
        myGuid = Guid.NewGuid();
    }

    public MyModel(Guid guid)
    {
        myGuid = guid;
    }

    public Guid MyGuid
    {
        get { return myGuid; }
        set { myGuid = value; }
    }
}

为什么不在构造函数中设置它呢?在加载
MyModel
时,可能没有从数据库中正确填充MyGuid。
NewGuid
将作为对象构造的一部分出现,之后应该用您的DB值覆盖它——假设您正确地加载了它!如果加载正确,那么我猜您没有将其作为隐藏值存储在
视图中
,因此在发回时,它认为您正在创建新记录,而不是编辑现有记录。没有更多的上下文,只是一种预感。如果您正在将Guid写入数据库,并且希望从数据库中读回Guid,则必须以某种方式使用数据库中的值填充模型。当前所有代码显示的是,每次创建模型实例时都会创建一个新的Guid。将
Guid
威胁为字符串并不是一个好主意。你的类处理
Guid
,威胁它们为。为什么不在构造函数中设置它?加载
MyModel
时,你可能没有从数据库中正确填充MyGuid。
NewGuid
将作为对象构造的一部分出现,之后应该用您的DB值覆盖它——假设您正确地加载了它!如果加载正确,那么我猜您没有将其作为隐藏值存储在
视图中
,因此在发回时,它认为您正在创建新记录,而不是编辑现有记录。没有更多的上下文,只是一种预感。如果您正在将Guid写入数据库,并且希望从数据库中读回Guid,则必须以某种方式使用数据库中的值填充模型。当前所有代码显示的是,每次创建模型实例时都会创建一个新的Guid。将
Guid
威胁为字符串并不是一个好主意。你的类处理
Guid
,威胁他们为。我试过这个。但每次我创建一个条目时,它总是不返回新的Guid…我尝试了这个。但每次我创建一个条目时,它总是不返回新的Guid。。。