如何在Entity Framework,Database中首先创建一个新的主键?

时间:2014-10-12 11:41:32

标签: entity-framework

我从下面的代码中获得了运行时异常。我认为它不是创建主键(CustomerID和int)。我使用了向导,而且我有多年前使用ADO.NET的经验,但这是我的第一个使用Entity Framework 6.0和DbContext的项目。我使用"数据库优先"生成了EDMX文件,因此存在实际的数据库。我不认为任何其他表都与此表具有外键关联是强制性的,因此我认为(但不确定)此运行时错误是由于无法创建新主键。这可能是一个非常简单的问题,也可能是一个难题,所以我稍后会检查。

[OperationContract]
public void DoWork ()
{
     try
     {
            using (var ctx = new MyEDMXdBExistingDatabase())
            {
                CUSTOMER myCustomerREALLYNEW = new CUSTOMER();
                myCustomerREALLYNEW.LastName = "NeWLASTNAME";

                myCustomerREALLYNEW.CustomerID = 0; //set primary key to zero and let entity framework create new one automagically?  I think this works based on past experience, but it's not working now  

                ctx.CUSTOMERs.Add(myCustomerREALLYNEW);
                ctx.SaveChanges(); //PROBLEM HERE If comment out this line no runtime error
            }
        }
        catch (DbEntityValidationException ex1)
        {
            Debug.WriteLine(ex1.Message);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
        finally
        {
        } 
}

1 个答案:

答案 0 :(得分:0)

我添加了以下代码,它向我展示了新的CUSTOMER缺少一个mandontory,非null字段(Address)。一旦我添加了myCustomerREALLYNEW.Address =" 123 Street&#34 ;;然后可以添加新记录/对象。

这是我为捕获运行时异常而添加的代码,我从网上下载了这些代码:

catch (DbEntityValidationException ex1)
{
Debug.WriteLine("!" + ex1.Message);
List<string> errorMessages = new List<string>();
foreach (DbEntityValidationResult validationResult in ex1.EntityValidationErrors)
{
string entityName = validationResult.Entry.Entity.GetType().Name;
foreach (DbValidationError error in validationResult.ValidationErrors)
{
errorMessages.Add(entityName + "." + error.PropertyName + ":" + errorMessages);
}
}

foreach (string s in errorMessages)
{
Debug.WriteLine(s);
}

}